package thread.wang_bao_ling.c01;

public class Atom_Visible {
    private static long count = 0;

    public static void main(String[] args) throws InterruptedException {
        //两个线程调用了两次按理来说应该是2w，但实际输出值会小于2w，因为count+=1不是一个原子操作
        //其实此处count变量的可见性问题也是导致结果不准确的原因之一
        System.out.println("最终count的值为："+calc());
    }

    private void add1w() {
        int idx = 0;
        while(idx++ < 10000) {
                count += 1;
        }
    }

    public static long calc() throws InterruptedException {
        final Atom_Visible test = new Atom_Visible();
        // 创建两个线程，执行add()操作
        Thread th1 = new Thread(()->{
            test.add1w();
        });
        Thread th2 = new Thread(()->{
            test.add1w();
        });
        // 启动两个线程
        th1.start();
        th2.start();
        // 等待两个线程执行结束
        th1.join();
        th2.join();
        return count;
    }

}
